import axios from 'axios'
import config from '../config'

const NETWORK_ERROR = "网络请求异常，请稍后重试..."

// 创建一个axios实例函数
const service = axios.create({
  baseURL: config.baseApi,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
})

// 在请求之前做一些事情
service.interceptors.request.use((req) => {
  // 可以自定义header
  // 可以用于jwt认证的时候
  return req;
})

// 在请求之后做一些事情
service.interceptors.response.use((res) => {
  const { code, data, message } = res.data;
  if (code == 200) {
    return res.data;
  } else if (code === 20000) {
    return res.data;
  } else {
    console.log(code)
    // 网络请求错误
    console.log(message)
    ElMessage.error(message);
    return Promise.reject(message || NETWORK_ERROR)
  }
})

// 封装的核心函数
function request(options) {
  options.method = options.method || 'get';
  if (options.method.toLowerCase() === 'get') {
    options.params = options.data;
  } else {
    // 添加dataName作为请求数据的字段名
    if(options.dataName){
        options.data = {
            [options.dataName]: options.data
          };
    }
    
  }
  // 对mock的处理
  let isMock = config.mock;
  if (typeof options.mock !== 'undefined') {
    isMock = options.mock
  }
  // 对线上环境做处理
  if (config.env === 'prod') { // 当前处于线上环境
    // 不给你用到mock的机会
    service.defaults.baseURL = config.baseApi
  } else {
    service.defaults.baseURL = isMock ? config.mockApi : config.baseApi
  }

  return service(options)
}

export default request
